#!/bin/bash

# 后端服务停止脚本
# 支持停止uvicorn和gunicorn进程

# 配置
APP_DIR="$(cd "$(dirname "$0")" && pwd)"
PID_FILE="${APP_DIR}/.pid"

echo "正在停止卡系统测试平台后端服务..."

# 停止方式1: 通过PID文件停止
if [ -f "${PID_FILE}" ]; then
    PID=$(cat "${PID_FILE}")
    if ps -p ${PID} > /dev/null; then
        echo "正在停止PID为 ${PID} 的进程..."
        kill ${PID}
        sleep 2
        if ps -p ${PID} > /dev/null; then
            echo "进程未响应，强制终止..."
            kill -9 ${PID}
        fi
        rm -f "${PID_FILE}"
        echo "服务已停止"
    else
        echo "PID文件存在但进程不存在，可能已经停止"
        rm -f "${PID_FILE}"
    fi
fi

# 停止方式2: 查找并停止所有相关进程
# 停止gunicorn进程
GUNICORN_COUNT=$(pgrep -f "gunicorn.*app.main:app" | wc -l)
if [ "${GUNICORN_COUNT}" -gt 0 ]; then
    echo "正在停止 ${GUNICORN_COUNT} 个 gunicorn 进程..."
    pkill -f "gunicorn.*app.main:app"
    sleep 2
    # 检查是否还有进程存在，如果有则强制终止
    if pgrep -f "gunicorn.*app.main:app" > /dev/null; then
        echo "部分进程未响应，强制终止..."
        pkill -9 -f "gunicorn.*app.main:app"
    fi
fi

# 停止uvicorn进程
UVICORN_COUNT=$(pgrep -f "uvicorn.*app.main:app" | wc -l)
if [ "${UVICORN_COUNT}" -gt 0 ]; then
    echo "正在停止 ${UVICORN_COUNT} 个 uvicorn 进程..."
    pkill -f "uvicorn.*app.main:app"
    sleep 2
    # 检查是否还有进程存在，如果有则强制终止
    if pgrep -f "uvicorn.*app.main:app" > /dev/null; then
        echo "部分进程未响应，强制终止..."
        pkill -9 -f "uvicorn.*app.main:app"
    fi
fi

echo "所有服务已停止" 